package com.sky.controller.user;

import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.*;

@RestController("userShopController")//作用：表示当前类是一个控制层类，可以处理请求和返回响应数据
@RequestMapping("/user/shop")
@Slf4j
@Api(tags = "店铺相关接口")
public class ShopController {

    public static final String KEY = "SHOP_STATUS";
    @Autowired
    private RedisTemplate redisTemplate;
//    /**
//     * 设置店铺营业状态
//     * @param status
//     * @return
//     */
//    @PutMapping ("/{status}")
//    @ApiOperation("设置营业状态")
//    public Result setStatus(@PathVariable Integer status){
//        log.info("设置店铺营业状态:{}",status==1?"营业中":"打烊中");
//        ValueOperations valueOperations = redisTemplate.opsForValue();//获取redis字符串对象
//        valueOperations.set("SHOP_STATUS",status);
//        return Result.success();
//    }

    /**
     * 获取营业状态
     * @return
     */
    @GetMapping("/status")
    @ApiOperation("获取店铺营业状态")
    public Result<Integer> getStatus(){
        ValueOperations valueOperations = redisTemplate.opsForValue();
        Integer status = (Integer) valueOperations.get(KEY);
        //在Java中选择使用 Integer 而不是 int 通常有以下几个重要原因：
        //1. 集合框架兼容性
        //Java的集合类（如 List、Map、Set 等）只能存储对象，不能存储基本数据类型
        //Integer 是对象，可以作为泛型参数使用，而 int 是基本类型，不能用于泛型
        //Redis中存储的数据都是字符串形式，取出时需要转换为Java对象类型。即使存入的是数字，取出时也是Object类型，需要显式转换为目标类型。
        log.info("获取店铺营业状态:{}",status==1?"营业中":"打烊中");
        return Result.success(status);
    }
}
